package com.zhang;

/**
 * 动态数组接口
 *
 * @param <E> 泛型E
 */
public interface List<E> {
    /**
     * 获取元素的数量
     *
     * @return 容器类目前的数量
     */
    int size();

    /**
     * 判断容器内是否没有元素
     *
     * @return true代表没有元素, false代表有元素
     */
    boolean isEmpty();

    /**
     * 判断容器内是否包含某个元素
     *
     * @param element 要判断的元素
     * @return true表示包含, false表示不包含
     */
    boolean contains(E element);

    /**
     * 添加元素到最后面
     *
     * @param element 需要添加的元素
     */
    void add(E element);

    /**
     * 返回index位置对应的元素
     *
     * @param index 需要获取得位置
     * @return 获取到的元素
     */
    E get(int index);

    /**
     * 设置
     *
     * @param index   要设置元素的位置
     * @param element 要设置的元素
     * @return 返回设置之前的元素
     */
    E set(int index, E element);

    /**
     * 往index位置的元素
     *
     * @param index   要添加的元素位置
     * @param element 要添加的元素
     */
    void add(int index, E element);

    /**
     * 删除index位置对应的元素
     *
     * @param index 要删除元素的位置
     * @return 返回删除掉的元素
     */
    E remove(int index);

    /**
     * 查看元素的位置
     *
     * @param element 要查看的元素
     * @return 返回在容器的索引位置, 不存在返回-1
     */
    int indexOf(E element);

    /**
     * 清除所有的元素
     */
    void clear();
}
